Animation Reviser's Tutorial
Animation Reviser is a new Wad Merger's tool born with 1,1,0,0 release of trng_fixer.
It could look alike Animation Wizard, since it has same target to get new animations but Animation Reviser uses another approach: while Animation Wizard created always new animations (a new serie of frames) starting always from same method (building intermediate frames between a start and a end frame pair, Animation Reviser modifies already existing animations, preserving most of their meshes' rotations and uses different methods to elaborate them.
Summary
Main interface of Animation Reviser
"Scope" group-box
Syntax for Scope input boxes
Special syntax for frame indices: the round “( ... )” parenthesis
[Current], [All], [First] and [Last] special formatters
"Operation to perform" group-box
"Looped Animation" operation
"Mirror animation" operation
"Selective Copy of Animation" Operation
"Variable Speed Animation" Operation
"Fix Rotation" operation
"Fix object's position" operation
"Edit Animation's Frames" operations
"Smoother Animation" operation
"Works on" settings
"Start Values" and "End Values" group-boxes
Type of values for Start / End settings
Degrees of rotation
Unit of measurement for 3d space
“[Current] of given first mesh” button
“Take from mesh” buttons
The “Mesh Selector” window
“[Current] of given last mesh” button
"Same as Start Values" button
“Output” group-box
The “Don’t modify animation but export it to file ...” option
“Insert/Add the frame generated by current operation...” option
Input box for amount of new frames
"Compute frames required by this operation" Button
Undo Manager
Some remarks about Undo Manager
Operation: "Rotate Mesh"
"Normal" rotation
Example: Lara's animation to grab a tree trunk
"Fix Rotation" operation
Example: Fixing an animation with flipped meshes
"Progressive rotation" operation
Example: simulation of gravity falling down
"Wheel (end-less) rotation" operation
Example: Our release of jeep, with turning wheels
Parameters for jeep's wheels
"Metronome rotation" operation
Example: move the Anaconda's tongue, in and out
"Looped Animation" operation
Input parameters for "Looped Animation" operation
"Mirror animation" operation
Example: Lara hits with rigth or left fist
In the case of some error in meshes' names
"Selective Copy of Animation" Operation
The settings of Selective Copy of animation
Example: running and shooting at same time
"Variable Speed Animation" Operation
Settings for Variable Speed Animation
The change of animation's lenght
Example: changing the speed, up and down, in same animation
"Fix object's position" operation
Example: moving upper a whole animation
"Edit Animation's Frames" operations
Shortcuts to edit frames from Animation Editor
SHIFT+R
SHIFT+C
SHIFT+I
SHIFT+V
When to use edit frame commands from Animation Editor and when from Animation Reviser
"Smoother Animation" operation
Create new intermediate frames between two frames
Example of "Get Smoother Animation" operation
Replace all even frames with intermediate frames
Example of Replace all even frames operation
Main interface of Animation Reviser
I know, it looks a bit complicated: a lot of settings (*), but in this tutorial we'll have many "down-to-earth" demonstrations to explain most of these features in very common situations for a level builder.
(*) Note: In the progress of this tutorial it's possibile that you'll see the main window of AR, a bit different in some circustances, because Animation Reviser is growing while I'm devoloping also this tutorial.
Now we'll see a rapid description of different group of settings, to explain better the Animation Reviser's interface, and then we'll begin with practical examples about using them.
"Scope" group-box
In this box you'll type the animation, frames or single meshes that will be affected by Animation Reviser's tools. You could see these setting as refered at "target to modify" but, however, in some circustances they could be seen also as sources, since (in most cases) Animation Reviser change existing animations and frames and, in this case, source and target will be the same.
In could look weird to have to set animations, like it was not simply the current animation but, a smart skill of Animation Reviser is own that to give a big freedom about the choice of animations, frame or meshes to elaborate.
With animation reviser you could modify an existing animation, changing only a single mesh, preserving all others. Or working only on some frames of this animation, letting unchanged others.
Then we'll see, that you could also "animate" in indpendent way, only a rotation on a single axis of a given mesh, letting unchanged the rotations (of that mesh) on other axis.
Syntax for Scope input boxes
You can set the target (that sometimes it will be also the source) animations, frames or meshes, using different methods.
You can simply type the index of that item, like:
23
that could be for animation with index 23.
You can type a series of single indices (a range) as:
10-24
That it could be the serie of frames to modify: from 10 to (enclosed) 24
A list of indices, divided by commas, like:
2,4, 8,10
That it could be the list of meshes where perform our changes (letting unmodified all others)
You can also mixing above formats, dividing each of them with '/" separator.
For instance, following is a valid input:
1-4/8,10/12-15
That, supposing it was a list of mehses, will affect changes on: 1, 2,3,4,8,10,12,13,14 and 15 mesh of current object.
Note: in spite you could use above syntax in each field, it should be weird (and probably detriment) to type, in "Frames" input box, a non consecutive serie of indices. An animation, to have a smooth effect, it's own shaped by a serie of little changes, between a frame and the next. If the serie of indices are not consecutive, there will be "holes" in the animation, where some frame will be not changed with a bad outcome to see.
Therefore you should always, for "Frames", using a range (and only one), like "8-22", or the "[ALL]" formatter that will take all frames of the animation. It's possibile also using the [CURRENT] formatter, since it will be seen it as "from current frame upto last frame of animation".
Some sub-commands of [Rotate Mesh] will give error if you didn't set a consecutive serie of frames.
Special syntax for frame indices: the round "( ... )" parenthesis
This is a boring complication but, since it exists, we should talk a bit about that.
In Animation editor the frame indices change when you modify the frame rate of their animation. It is an understandable choice,anyway it could confuse a bit, since, in the reality, also when you set, in an animation with (for instance) 6 frames, a frame rate of "4", the real frames will be still 6, but the frame rate will change only the time they will be displayed in game scene: each of them will remain for 4 frames in the scene. This fact explain why we cannot to modify really (in above example) 24 frame (6*4), since we'll have only 6 real frame to change with our animations and, further example, we cannot change the frame 10 of this new animation with (apparently 24 frames) because the frame with index 10, simply doesn't exist in indpendend way: it will be only the real frame with index 2 that will be showed for 4 frames in game.
A lot of words... but the point is that all tools that work with frames will see always an animation as shaped by real frames, the frame rate will be ignored and so, also those frames that we could name "multiple frames"
Also Animation Reviser will work only on real frames but... you, in animation editor, will see the indices of multiple frames (supposing that the animation had a frame rate different than 1).
To avoid complication between "real" and "multiple" frames, Animation Reviser used following convention:
"Multiple" frame indices, will be showed (and typed) in round parenthesis, while real frame indices, will be showed/typed in normal way.
For instance, this frame serie:
(10)-(16)
It means: multiple frames, from 10 to 16, where these values are the same you could see in frame bar of Animation Editor
While this other frame serie:
18-31
It means: real frames between 18 and 31, ignoring the current frame rate value.
You can use both of above syntax, anyway (a little suggestion) if you are going to work for a lot of time, on some new (in building phase) animation, perhaps it's better that you set for it a frame rate = 1, in building phase. In this way you'll avoid all these complications. Then, later, you'll spend a second to set a wished frame rate for your (already) completed final animation.
[Current], [All], [First] and [Last] special formatters
To get easier the input phase, you can use, in many circustances, the buttons of "Scope" box, to set current animation, frame or mesh, where for "current" we mean the "currently selected" item, in Animation Editor, of course.
Anyway, about the "current" frame, we should get that it should be meaningless working, trying to animate an only one (selected) frame. For this reason, about the frame input box, the [Current] tag formatter, will be seen as "From Current frame, upto end of animation". I.e. the current frame will be only the start point from where perform the animating job.
While, about "All" buttons, they mean "All animations" (of current object), or "All frames" of animation of previous input box, or all meshes of current object.
"[Last]" formatter works only for frames, because some operation could require own the index of last frame of animation to work.
While "[First]" is available for "Meshes", because mesh 0 (i.e. the "First") is special since it's only one mesh that is possible to move, i.e. modifiying it's position in 3d space.
When you use one of above formatters, you cannot using other syntax (in that input box), like that of single (or range) indices, seen above.
"Operation to perform" group-box
Here it is where you can choose the kind of mod to perform over your animations.
Each operation will have different settings and they will be showed immediately below the combo-box of "Operation to perform".
We'll see (and describe) them in depth, with practical examples:
Operation: "Rotate Mesh"
"Looped Animation" operation
"Mirror animation" operation
"Selective Copy of Animation" Operation
"Variable Speed Animation" Operation
"Fix Rotation" operation
"Fix object's position" operation
"Edit Animation's Frames" operations
"Get Smoother Animation" operation
"Works on" settings
The settings in this little group-box, are the further evidence about the very "selective" approach used by Animation Reviser. When you'll go to rotate some mesh or to move the object (always mesh 0), you'll be able also to enable or disable change on single axis. Indeed, if you unchek one X,Y or Z axis, original values for that axis will be not affected by current operation. It could look weird, but in some cirucustance it could be really usefull working only on some axis but not all.
"Start Values" and "End Values" group-boxes
These two group of settings, work in very similar way of classic Animation Wizard.
Indeed, Animation Wizard, worked always from a "First frame" and a "Last frame", applying little changes to rotations (or positions) to have intermediate valus between two limits. In some circustances also Animation Reviser will use this method, and in that case, we'll have to set "start values" (at begin of our animation) and "end values" (those they should reach, at end of the animated operation.
Anyway, it will not happen always that we'll use these "start-end" values. Indeed, for some operations, they will be useless and, in those cases, these group-boxes will vanish from the Animation Reviser's window.
Type of values for Start / End settings
When you'll work on some "move" operation, the values will be position in 3d world, sometimes also called "transpositions". While when we'll are working on rotations (turning meshes) they will be degrees.
There are some little differences, in numeric system used by Animation Reviser, respect Animation Wizard.
Degrees of rotation
In Animation reviser (and in particular way, in start/end input boxes) you can type also floating point numbers, as rotation degrees. To be honest, this was possible also in [Rotate] window of Animation Wizard but, weirdly, Animation Wizard didn't show correctly decimal side of rotations in [Abs] mode. The point is that some rotation, expressed in 360th degrees, sometimes had a real value a bit different. For instance you saw that a mesh had X rotation of 56 degrees but, in the reality, it was 56.23 degrees.
That missing, of decimal side of degrees, could get a bit less precise some animation procedures.
In Animation Reviser all degrees we'll be always showed with 2 decimal digits and you'll be also able to type them in this way, of course.
Unit of measurement for 3d space
Another difference, between units used in Animation Editor and Animation Reviser is that, while in Animation Editor the distance unit was expressed with the ratio: 1.0 = 1024 units, in Animation Reviser, the unit of measurement will be own the original tomb4 units (ratio 1:1). This means that, if you want to do move an object of a sector, you'll type 1024 as displacement. For this reason, about distance units, Animation Reviser doesn't accept floating point values, you have no need of them, you can type always the distance with its real value: 256 is "a click", 256 is half sector and 1024 is a sector in tomb4 world.
"[Current] of given first mesh" button
This button will type in all "Start values" input boxes the "[Current]" formatter. We had already seen this formatter in "Current" and "All" buttons of "Scope" group-box, but in this case it's important understanding what we mean for "first mesh". It's not really the mesh with first index (typed in Meshes input box of "Scope" group) but, rahter the mesh of FIRST FRAME of our animated operation. For instance, if in "Frames" input-box (of "Scope" group) we had typed "10-23", the values used as "Start values" will be those taken from the frame with index 10, while, about the mesh index, they will be all indices we typed in "Meshes" input box (always in "Scope" group).
"Take from mesh" buttons
Clicking on one of these buttons, it will be showed following window.
The "Mesh Selector" window
This is a way to get the rotation (or transposition of mesh 0) values to copy to our start or end input boxes.
It is faster than, quitting Animation Reviser, selecting given frame and mesh and enable the [Rotate] or [Move] window to see the absolute values of that mesh.
Anyway, in spite it could be comfortable using [Take from mesh] command, in the case the values were own those of first frame for a given mesh, it's better using the [Current] formatter, also because, only in this way, you could work on more than one mesh, letting generic start/end values.
"[Current] of given last mesh" button
This button works alike “[Current] of given first mesh” button , of course. Anyway threre is usual speech to do: the "last" mesh is in the reality the value of mesh of LAST FRAME, the higher value of frame to elaborate and not, the mesh with higher index in "Scope" meshes input box.
"Same as Start Values" button
It should be enough clear the target: with this button you can copy, to [End Values], same values you typed in [Start Va
lues].
With some operations or sub-commands, you could find useful to do not having a change of values to affect a mesh or a object's positon, but forcing always same values.
"Output" group-box
The output settings allow to change the output operations in two way:
- Saving the revised animation to a .trw file (the format used by Wad Merger to export/import animations)
- To add new frames to store the changes generated by Animation Reviser, avoid to overwriting already existing frame of source animation.
The "Don't modify animation but export it to file ..." option
If you check this option no animation will be modified in Wad Merger but, a modified copy of elaborated animation will be saved in a .trw file.
You should type a name in the edit box, with no extension (the ".trw" extensione will be added by Animation Reviser itself) and no folder (it will be used the folder of current wad file loaded in Wad Merger)
Note: If you are working on more than one animation, i.e. if in "Animations" inputbox of "Scope" settings you set two or more animations, the name for exported file you typed weill be modified with progressive numbers. For instance, if you set to work on three animations (typing their indices in "Animations" of "Scope" settings) and you set as name for exported file, let's say: "lara_grab_trunk", Animation Reviser will generte three files:
lara_grab_trunk_1.trw
lara_grab_trunk_2.trw
lara_grab_trunk_3.trw
In the case you let unchecked the "Export" option, the animations, frames and meshes (selected in "Scope" settings) will be modified directly in animation editor data, and you'll be able to see the outcome immedately, quitting Animation Reviser and coming back to Animation Editor window.
Warning: Animation Reviser is not able to save also the id-state-changes of animation, to exported file. Since I've not been able to discover the internal format of state-changes data in .trw files, the amount of state-changes will be forced as 0. It means that, in the exported .trw files (generated by Animation Reviser), the (further) state-changes of given animation, will be lost and when you'll try to import that animation, they will be missing.
"Insert/Add the frame generated by current operation..." option
This chance should be used only for operations that generated a full set of mesh rotations, otherwise you could get some new frames where, only that little subset of meshes (those chosen in "Scope" settings) will have meaningful values, while all other will be in same (still) position of Basic Joint posture (the posture you see in animation editor when has been selected "No Animation").
Anyway, for some operations where it will be created a full animation, it could be necessary creating new frames enabling this option.
Notes:
- In some particular operations, the creation of new frames will be made by Animation Reviser itself, since, for the user, it could be very hard to compute how many new frames could be necessary. In above kind of operations, you could discover in advance how many frame will be generated, clicking on [button].
About the chance to enable or less the [Insert/add frames], you can enable this option also without typing the number of frames to generate, simply typing "-1" in input-box. In this way it will be Animation Reviser to create all necessary frames.
- About the difference between "insert" or "add" it depends by the index of last frame you set in "Scope" group-box (for "frames") : the new frames will be added or inserted from next frame. Therefore, if the last frame was really also the last of the animation, you'll have an "Adding" new frame at end of the animation, while, if last index frame was in intermediate position, the frame will be "inserted" in that position (last frame + 1).
Input box for amount of new frames
About the number of new frames, I remind you that also in this input box you should follow the Special syntax for frame indices: the round “( ... )” parenthesis
It means that, if the animation where you'll add frames, has a frame rate different than "1", in the case you want type the amount of frame in "multiple" frames, you'll have to type that number in round parenthesis:
(16)
Above it could be: 16 multiple frames, i.e. supposing that the frame rate for current animaton was 2, it will be added 8 real frames that, with frame rate 2, it will be seen as 16 new multiple frames.
While if you type amount of new frame in this way:
8
You'll get same outcome: it will be added 8 real frames that, with frame rate 2, it will be seen as 16 multiple frames.
Note: about the amount of frame for particular operations, see also the notes of “Insert/Add the frame generated by current operation...” option previous paragraph.
"Compute frames required by this operation" Button
With some operation is not clear how many frames will be required,because it will depend by parameter values you typed.
In above situation, you could need to use this button to know in advance how many frame will be affected by current operation.
Note that, the [Compute frames...] button, we'll perform a simulation of current operation, practically it will work like it was really creating the new animation but, in the reality, without modifying anything.
For this reason, once click on it, you coudl receive same error messages that you get for [Perform operation] button, for instance, if you missed to type some input parameter, ect.
Undo Manager
All operations handled by Animation Reviser could be cancelled (restoring previous animation data) whereby Undo Manager (SHIFT+U).
Unfortunately it has not been possible to integrate these undo skills with those of Animation Editor (CTRL+Z or "Edit->Undo" menu), because, when I tried, I got a lot of crashes.
Therefor you have to remind that there are two ways to undo a previous operation:
- Using wad merger undo, for operations about rotation or movement of mehses, or changes in Animation Commands, using the command (CTRL+Z)
- Using Undo Manager, for operations handled by Animation Reviser, and so, all operations of Animation Reviser window and paste/remove sequnces of frames (also handled by Animation Reviser), more (curiously) modification in collision box of animation (since Animation Editor didn't support undo features for them), using SHIFT+U command
Some remarks about Undo Manager
- Undo Manager save currnet animation before modifying it with some operaitons. All these operations are performed by trng_fixer, with the exception of "Calculate Collision (frame)" and "Calculate Collision (animation)" menu, that are handled by Animation Editor.
- When you use the SHIFT+U command, it will be showed a msgbox (see above image), where you can confirm the undo operation, skip that to see the previous (older) or quit Undo Manager with no change.
- When you click on [Ok] button, the Undo point, described in the msgbox, will be performed and the animation will be restored earlier of that operation.
- Once you restored (i.e. performed with [ok] button) that Undo point will be removed and it will be no more present in the undo list.
- About the [No] option, it will be skipped (not performed) the Undo Point you saw in the msgbox, and it will be showed the previous (older) Undo Point. Anyway, try to get that, in many circustances, when the undo points work on same animation, if you peform and older undo point, you'll get an animation older also than that you skipped. However, this chance to skip some Undo point, to perform only anohter, older, it could be useful when these Undo points work on different animation indices.
- When Undo Manager shows you an Undo point, about an animation different (as index) of current animation, there will be a "warning", own to signal you this situation, anyway this doesn't mean that you cannot restore the Undo point, it will work fine but it will affect the animation with the given index (showed in the Undo Manager msgbox).
- If you, in first moment skipped an undo point, and then, later, you would change your mind and perform it, just you quit Undo Manager with [Cancel] button. In this way, no change will be performed on animations but, next time you'll use SHIFT+U command, it will be showed again last Undo Point (the earliest)
- Undo manager is able to record last 200 operations performed in current session but, once you quit Wad Merger, all these recordings will be lost. Anyway you can quit Animation Editor, loading another wad, starting newly Animation Editor, and all previous Undo Points will be still present to be restored(*)
- (*) If you used for long time Wad Merger, passing from a wad to another, all last 200 operations could be restored, anyway you'll not see reference for Undo points when you are working on a wad different of that used to store those undo points.
Practically: when you are working on "catacomb.wad", in Undo Maanger you'll see only undo points recorded in "Catacomb.wad" and those (anyway recorded) for other wads (for instance settomb) will be not showed, but they will appear newly when you'll load settomb wad.
- If you change the object lodead in Animation editor, the Undo points saved in same job session but working on a different slot, will be not showed. You could perceive this situation, noticing that the numbers [CurrentUndoPoint/AmoutOfUndoPoints] in top left corner of msgbox, sometimes change suddenly, skipping some values.
- Unfortunately, in the restoring operation, the ID state changes of given animations, will be not restored, because the internal format of these data is not yet clear to me, anyway they will be neither overwritten
Operation: "Rotate Mesh"
There are different sub-commands for Rotate Mesh, some of them have a very specific target.
Anyway now we'll begin with the most classic command: rotate the mesh in "normal" way.
"Normal" rotation
This option is so basic and similar that of Animation Wizard that we could wonder: why should we use Animation Reviser for a common rotation? The answer is: because only with Animation Reviser we can rotate only one (or few) mesh without alterating the whole animation.
Now we'll see a real situation where we could need of this "normal" but selective rotation.
Example: Lara's animation to grab a tree trunk
Let's say that we need of a custom animation where Lara jumps and she grabs a tree trunk for then climbing over it.
Instead by creating (from scratch) this animation, we could take an existing standard animation of Lara and modify a bit it for our targets.
Wel could use the animation 379
Above animation is when Lara jumps and grabs the rope.
It's alike that we wish but we can see that, last frames are not good for our target: a tree trunk is larger than a rope, of course, and in last frames lara keeps her hands too closed to her body.
Therefore we can modify a bit this animation.
As first step we'll copy and paste the original animation 379 in another slot, to do not affect the rope animations.
I copied it to 445 animation slot, since it was free in settomb wad.
Now, working on 445 animation, we'll change, manually, the last frame to get Lara's arms in correct postion to grab a trunk.
In above picture you can see the last frame, how it was (at left) and how I modified it (at right).
Also supposing that the new last frame was ok for our target, we cannot using the animation in this way, of course. It has only last frame in correct positon but all other are still like original animation.
So now we'll use Animation Reviser to adjust last frames with an animation that will work only on meshes that I had to modify: the arms meshes, letting unchanged others
We'll animate following meshes:
8: Arm (right) 59 -142 -12
9: Forearm (right) 10 95 -2
10: Hand (right) 1 101 -1
11: Arm (left) -57 -143 -12
12: Forearm (left) -9 98 -2
13: Hand (left) -1 99 -1
So the range "8-13"
The animation to change is the 445, we said.
Now we have to set what is the frame range to change. Surely the last frame will be own the last frame of our animation, the frame with index=11 but ... about the first frame, what?
We could choose also the first frame (0) of the animation but it's better letting original frames when it's possibile.
Looking again the frames of original animation:
We could use, as first frame, the frame 4, because its posture is still enough compatible with our final frame, while the frame 5 is already rather different.
So our frame range will be: " 4-11"
(Please, note that, current animation has frame rate = 1, so there is no problem about real frames or multiple frames issue.)
Now we can using Animation Reviser to build this selective animation.
So we'll set our target (and source, in this case) settings (see above picture) in "Scope" settings.
Then we'll check the "Normal" rotation in "Rotate Mesh" operation. At end, we'll have to set Start/end rotation for our animations.
In this situation we'll set simply all input boxes with [Current]:
With above settings, indeed (see above picture) we'll get that Animation Reviser wil take as Start rotation from frame 4 (the first) and the End rotation from frame 11 (the last frame) and this for each of meshes we typed in "Meshes" (in "Scope" settings), so for the mesh range: 8-13.
About the "Output" settings, there is no reason to choose to export the final animation (The “Don’t modify animation but export it to file ...” option ) and, surely, we don't want adding new frames, because our idea is own to modify old frames. So we'll let unchecked also “Insert/Add the frame generated by current operation...” option
Now just only clicking on [Perform] button to have our new animation.
Now, quit Animation Reviser and let's the new animation
It's enough fine: the (more) open arms follow the animation how we wished.
Anyway, looking better there is a weird error in Lara's meshes: the left hand looks like it was turned by 180 degres.
Now, to fix this problem, we could use another Animation Reviser's operation.
"Fix Rotation" operation
Sometimes it happen that we want only fixing some misturned mesh.
In this case we can use "Fix Rotation" operation, to force some mesh to have another degree for the whole sequence.
Example: Fixing an animation with flipped meshes
An error that could occur, creating animations, is to have a mis-placed (misturned) little mesh that we didn't notice while we were building the animation.
If we discover this bad rotation only at end, it could be annoying to remake whole animation.
This error happened also to eidos programmers, of course, for instance look these frame of animation 379, that where Lara jumps to grab at fly the rope.
If you look carefully, you'll se that left Lara's hand has a weird rotation: in frame 2 and 3 (and then also 4 and 5) she shows us the back of the hand, in spite from that view should be not possible.
It has been a mistake of Eidos' programmers, ok.
Now let's see how we could fix that problem with Animation Reviser.
We'll have to work on:
Animation: 379
Frames: 2-5
Meshes: 13
(since Lara's left hand, is mesh 13)
So, type above values in "Scope" settings, then choose the "Fix Rotation" operation.
This operation has no extra settings but you'll have to type in "Start Values/EndValues" settings the values to use.
Earlier of this, we should discover what is the rotation that could fix above bug and on what axis.
Performing an experiment with {Rotate] window of Animation Editor, we discover that mesh was flipped on "Y" axis by 180 degrees.
Therefore, in [Start Values] we'll type {0,180,0}
In both, start and end, group-boxes.
In this way it will be added +180 (on Y axis rotation) to mesh 13, in all selected frames.
This is different than a common rotation, since now we are going to add our values to existing values for that mesh.
Note: to be precise, we should have typed "-180" but, practically we'll get same outcome in this case (360 degrees are even than 0 degrees)
Another chance was to type only the "180" in Y field and then uncheck the "Works on" X, Z options.
Now, let's click on [Perform Operation] button and then we see how Animation Reviser modified the animation.
Ok, it works better now, but, to be honest, probably this animation could need some other fixing in last frames.
Anyway this was only a demonstration about how to fix some rotations for a specific mesh, without disturbing the remaining animation data.
"Progressive rotation" operation
For "Progressive" we mean "non constant". In some circustances we could wish to have a mesh that was turned with different speed, at start slowly (for instance) and then faster.
Now let's see an example of when it could be useful.
Example: simulation of gravity falling down
I built this (dumb) trap...
It should work in this way: when lara touch the board, it will be moved and the pillar will fall down on her.
Note: You can download Settom Wad with pillar trap you'll find this object in 261:PUZZLE_HOLE2 slot.
First animation will be that of pillar falling down, following the direction showed in above picture.
We could use Animation Wizard to build this animation
Just set (above) first frame and last frame and we'll get our animation.
note: To get the change between first and last frame, it's necessary change the Z Rotation from 0 to 90 degrees.
Anyway, looking how it works this animation, we notice that it's not so good: the speed of its movement is constant and this should not happen in the reality. A pillar that fall in that way, should, earlier move very slowly and then increasing its speed upto smashing on the ground.
To solve this problem we can use the "progressive rotation".
Now remove all frames generated by Animation Wizard, to come back at only one start frame. (In this case, you can get this outcome, clicking on [Reset Animation] button.)
And now we'll use Animation Reviser to have a progressive rotation, where, at start the pillar will move very slowly, and then always more quickly.
I have to remind you that, progressive rotations, could look a bit heavy to handle.
Main problem is that is not so easy to know how many frames will be required for our animated sequence, since it will depend by input parameters we set for this progressive rotation.
To solve this problem we should use intensively the "Compute frames required by this operation" Button
Since, usually, we don't want that was Animation Reviser to choose the amount of frames, but it was us, we'll have to perform some attempt to get what values we should type in "Start-Speed", "End-Speed" and "accel" fields, to get a reasonable amount of frames.
Note: we are talking about "speed' but they are simply degrees, of course.
To get better outcomes from this operation, we should understand fine how it works.
The "Start-speed" will be added to current rotation of the mesh, at first frame (really to second, the frist will be always the same). Then, it will be increased the "Start-speed" with "Accel" value, and again, it will be added the current "Speed" to next frame. When the "Speed" reach the "End-Speed" value, it wil be no more increased by "Accel" value.
Let's go, we have to keep in our mind some input values to set:
Animation: 0 (or [Current] if we have selected it in Animation Editor)
Frames: 0 (or [Current], since there is only one frame now)
Mehses: 2 (the pillar)
About start-end values, we'll enable only changes on [Z] axis, uncheking [X] and [Y]
Start value (on Z axis) will be 0 (or [Current]) while End value will be "90"
Since our animaiton has only one frame, we'll have to create new frames to host the animated sequence, so we'll check the “Insert/Add the frame generated by current operation...” option but, in the Input box for amount of new frames we'll type "-1", since we don't know in advance how many frames will be required.
With above settings, indeed, it will be Animation Reviser to create all required frames to host this animated sequence.
Now we should set the rotation parameters.
Let's see to start with this attempt:
StartSpeed= 0
EndSpeed=30
Accel=5
So, the Animation Reviser's window, should look as following:
Now we click on "Compute frames required by this operation" Button and we get this message box:
Ok, let's see that 7 frames was ok for us... anyway, I remind you how to work to change this amout of frames:
In the case we wished more frames, we'll have to reduce the value of max speed (in our case, it was "End speed") and "accel" speed.
While, when we want reduce the frames, we'll have to increase the values for max speed and accel.
Now we can perform really the animation, cicking on [Perform Operation] button.
In animation editor we can see final outcome: it's not so bad but there are some problems:
- There is no change between frame 0 and frame 1, and this depepend by the "Start speed" =0. We should change that
- Looking final frames, it is clear that, last frame had a turning lower than previous. It looks weird but there is a reason...
Now, click on [Animation Report] button, enable the "Frames" and disable the "Meshes".
We'll get this report:
================= REAL FRAMES ==========================
FRAME[0]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 0°
FRAME[1]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 0°
FRAME[2]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 4°
FRAME[3]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 14°
FRAME[4]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 29°
FRAME[5]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 49°
FRAME[6]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 73°
FRAME[7]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 90°
========================================================
Really, in above report, only one value is interesting for us, it's the Z rotation on mesh with index 2 (the pillar)
So we can summary these data in this way:
Frame RotZ-Mesh-2
------------------
0 0
1 0
2 4
3 14
4 29
5 49
6 73
7 90
------------------
In above list we can understand better those two errors: in frame 1 there is yet zrot =0, while in frame 7 the turning step has been of 17 degrees (from 73 to 90), while that previous (in frame 6) was of 24 degrees (from 49 to 73), This is not good, we wished a progressive rotation, where in last frames the "speed" was faster and not slower.
The reason of this mistake is Animation reviser applied our input parameters, and when it discovered that adding (probably 29 degreed) to frame 6 the z rot of frame 7, passed over the prefixed limit of 90 degrees, it stopped the animation, forcing 90 degrees.
To solve this problem, we have to perform another attempt....
As first change, we'll not set as "Start Speed" 0, othewise we'll have not change at start of an animated sequence.
So, let's say to use "5" as "Start Speed", then we could try to riduce the value of "End speed" to avoid there were too big jumps in rotations.
Let's say to use "20" as "End Speed".
Now, we reset current animation ([Reset Animation] button) and try againg, with these new parameters:
Start Speed: 5
End Speed: 20
Accel: 5
Click on [Perform Operation] button and let's see the outcome in Animation Editor.
It looks very better, but, to be sure, let's get another animation report.
================= REAL FRAMES ==========================
FRAME[0]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 0°
FRAME[1]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 4°
FRAME[2]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 14°
FRAME[3]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 29°
FRAME[4]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 49°
FRAME[5]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 68°
FRAME[6]
CollisionBox={-888,-510,-1703,40,-278,150,}
Transposition={16, 0, -42}
MeshFrames[3]
XRot YRot ZRot
[ 0] 0° 0° 0°
[ 1] 0° 0° 0°
[ 2] 0° 0° 90°
========================================================
The difference between Frame 4 and 5, was 19, while that between Frame 5 and frame 6 is 22. Ok, it's not perfect, but at least the turning speed had always increased.
Please note that Animation Reviser, own to fix this problem about rotation of last frame, when the current angle is very closed to final target (set in "End Values" ) it will force the final angle to required end values, in spite, with a simple adding, it had not been reached precisely.
The example for progressive rotation could end here.
"Wheel (end-less) rotation" operation
It's a bit uncomfortable getting a wheel effect on a mesh with Animation Wizard. The reason is that we cann't force a whole 360 degree turning, because Animation Wizard we'll look always for a shorter angle for the movement, more, it's surely impossible getting more than a circle in only one Animation Wizard usage.
Fortunately, with Animation Reviser, we can get all circle turning we wish with only one operation.
Example: Our release of jeep, with turning wheels
Let's say that we would create another vehicle, starting from the official jeep. With NG Tree Builder we could easily change many details of original jeep, anyway, if we want get this new vehicle indpendent by jeep slot, i.e. that it could work also in other slots, there is the problem of the wheels. Indeed, it happens, that jeep's wheels don't turn with jeep animations, it's an hardcoded effect to do turn them in game, and this hardcoded effect works only with jeep's slot, of course.
So now let's see how to change the animation of jeep's slot to have really turning wheels.
Notes:
- We should earlier copy all jeep slot in another slot and then working on that
- We should take care about what animations are really with moving jeep and what they aren't
Anyway now we'll do only a demonstration, so we'll take one animation, let's say the animation 12.
Now we should discover on what axis we have to turn the wheel mesh to get a rotation, and also the direction to have the wheel following the foreward movement on the jeep.
The meshes of wheels are these:
## NAME X Y Z
--------------------------------------------------
9: Wheel (right/front) 232 219 -6
10: Wheel (left/front) 232 -249 -6
12: Wheel (left/rear) -235 10 -251
13: Wheel (right/rear) 233 10 -251
--------------------------------------------------
Performing some experiment we discover that, to have correct turning, we should work on above meshes in following way:
Mesh Axis Sign
-------------------
9 RotY -angle
10 RotY -angle
12 RotX -angle
13 RotX -angle
-------------------
So we'll be able to handle only two wheels at once, because we cann't mixing wheels that require a different turning.
Parameters for jeep's wheels
About parameters for wheel rotations we can set only the number of full turns and the direction of rotations. About this, I remind you that:
- Clockwork wise, means positive degree increment
- Counter-clockwork wise, means negative degree increment
Therefore, since from our experiment we discovered that each wheel require a negative rotation, it means that we'll NOT check the "Clockwork wise" option.
About the "Amount of rotations" value, we have to choose: more turns we want and speeder will be the turning.
Let's say to try with: 3, for amount of rotations, anyway, when you had to to perform this operation on other animations, remind that the speed will be given by the ratio between: [Amount of rotations] / [Amount of frames]
This means that, if you want having same speed in different animations, you should compute what [Amount of rotations] set to have same ratio with the amount of frame for given animation.
Since we are working on animation 12, that has 40 (real) frames, our speed ratio is : 3 / 40
In the case then we go to change an animation that had 80 frames, we should set 6 as [Amount of rotations] to keep same final ratio. To be honest, it will be not always so easy to keep same ratio, but this is the general rule to follow. Anyway, to solve the problem to keep same ratio with animation that have a not compatible number of frames, I remind you a little trick: you can add, temporarily, some frames to the bottom of current animation, to get a compatible number of frames to get right ratio, and, after you got wheel animation, you could remove those extra frames.
So, we start from first two wheels, the meshes 9 and 10. This will be the final settings in Animation Reviser's window
Some remarks:
- With [Wheel rotations] it's not possible enable the [Insert/Add the frame required...] option. This operation has to work on existing frames.
- The "End Values" setting will be practically ignored, since the end rotation will be the same of the start, after whole turns. Anyway you cannot let empty that field, and so you should insert always [Current] for "End Values"
- It's important disable (uncheck) the axis to let unmodified. In above case the "X" and "Z" axis, since, simply typing a "0" in their fields, it could be not enough, to let unmodified that axis.
Now, click on [Perform Operation] button and let's see the outcome in Animation Editor.
The speed looks ok.
Now we have to work also with other two meshes the rear wheels, that require a rotation on X axis.
We'll keep almost all previous settings but we'll change the [Works on] settings, to disable [Y] and [Z] axis this time.
And now, perform also this operation.
The final outcome is enough good.
"Metronome rotation" operation
Metrone is to give the idea of this operation: turning a mesh go and back for a given number of times, between two given limits.
Also this operation (as most supported by Animation Reviser) requires to work on existing frames. So you cannot enable the creation of new frames to host this animated sequence.
About when to use this feature I could use it to move the tongue in and out. Not own my tongue, of course, but the forked tongue of my anaconda...
Example: move the Anaconda's tongue, in and out
Since a good snake should move very often its tongue in and out, I could use the "metronome" rotation to have this effect overlapped to oher animated meshes.
We have to verify what are the two angle limits and then Animation Reviser will rebound the rotation between them.
Performin an attempt we discover that (above) are limits we would have. Please, note that Animation Editor doesn't like negative numbers but, practically, that "354" on X axis, should be -6 degrees.
So we'll have to move the tongue only on X axis, between 0 and -6 degrees
Let's say to require to have 3 amount of changes. It means that there will be three rebound one two limits.
Since the tongue mesh has index = 6 and we are working with animation 0 that has 20 frames, these should be the settings
Perform the operation and let's how it works in animation editor.
(VIDEO)
Ok, perhaps the tongue moves out a bit too much, anyway the outcome is enough good.
"Looped Animation" operation
For "looped" animation we mean an animation that should be played in loop, where, after last frame, it will be played newly the same animation, starting from its first frame. It happens enough often this situation, for instance with "running" animations, where the character, until he is running, will go on to perform same animation.
A feature that should have a looped animation is to have not sudden changes in its movements, so that the player was not able to understand when the animation is coming back to be played after its last frames.
Default Lara's animations, indeed, have been built own in this way, anyway, when we are going to create our new animation for some enemy, we should take care to give to some of these animations that "looped" feature. For this target, we can use Animation Reviser and its "Looped animation" operation.
Input parameters for "Looped Animation" operation
In the reality there are no extra parameters for this operation but we have always to enable the “Insert/Add the frame generated by current operation...” option and choosing the number of frames to add and these will be the length of the generated animated sequence to modify the last frame of current animation, to reach the first frame of same animation, to have a smooth change between last to first frame.
About the "Scope" settings, this operation doesn't give many chances: it has to work on [All] meshes (otherwise there will be an error) and, about the "Frames" it will be from [Last] frame with creation of new frames (set in [Output] settings). With different input parameters than above, there will be an error message,
Let's see to want converting the animation 2 of Anaconda (stored in SETH BLADE slot of settomb.wad).
Watching this animaiton it's evident the change between last frame and first frame.
(video prima)
Now we could work on it with "Looped" operation.
Let's say to use 6 frames, to instert/add, at end these should be the settings:
Now we perform the operation and let's see the outcome
(video dopo)
"Mirror animation" operation
This operation works overall with human characters, like Lara or enemies (persons, or animals). When we are going to create a whole set of animaitons for a new character, it could happen to have to create specular animations to give to our creature the chance to perform some operations at his right, but also, same operation, at his left. For instance, to punch, to jump, to grab an edge, ect.
With "Mirror animation" we can get this specular duplicate in a very easy way.
Example: Lara hits with rigth or left fist
For instance, let's watch this animation: Lara tries to hit, with right fist, a further enemy.
(VIDEO)
If we want having also another animation, specular of above, where Lara hits using the left fist, just using the "Mirror Animation" operation.
Since we want having both animations, and "Mirror Animation" will change the animation on what we are working, we'll have to create a duplicate of our animation: we'll use [Animation/ Copy] menu command, then we'll add a new animation slot with [Add] button, and now, we'll use the [Animation->Replace] menu command to have our duplicated animation in our new slot, (in my case it is the 446 animation).
Now we can use Animation Reviser to modify this duplicate, creating a specular animtion on X axis.
We'll set as [Scope] settings: current animation, [All] frames, [All] meshes, and then we select the "Mirror Animation" operation.
Now it will be enough click on [Perform Operation] to see our 446 animation (where Lara used right fist) becomes a shot with left fist.
(VIDEO)
In the case of some error in meshes' names
This operation is easy, anyway with some moveables it could not work for a mistake. Animation Reviser, to perform this operation, needs to know the specular meshes in tree mesh of current moveable. I.e., it has to know what is the right mesh corresponding at left mesh, like "right hand" that is the specular mesh of "Left hand".
To get these informations, Animation Reviser parse the .nmf (.name mesh) file of current movreables, looking for meshes with same name but different only for the attribute (left) / (right).
For this reason, it could happen that someting went bad.
If current moveable has no .nmf file (because you have not yet created one for it), Animation reviser will work as if there were no specular meshes but probably that will be a mistake.
Please, note that some meshes could have not really a specular mesh: for instance the head is a single mesh, since there is no left-head or right head, and same speech is true for the chest or the butt, anyway with human or animal creatures, it happen very often (sic) that these had left/right arms, legs ect. If Animation reviser has not these informations (for the missing of .nmf file) it will treat all meshes like they were single (like head, or chest) but in this way the final animation will not work correctly.
For above speech, to use "Mirror Animation" operation, you have alwayas to take care to make a .nmf file for current moveable, setting the correct left/right attribute for the given meshes.
There is also another possible mistake that could occurs: when, in spite there was a .nmf file for current moveable, in this file there is an error: two specular meshes differ not only for right/left attribute but also for some other characters.
For instance, if we had this .nmf file:
SLOT:47 0: Butt 1: Thigh (left) 2: Calf (left) 3: Foot (left) 4: Thigh (right) 5: Calf (right) 6: Foot (right) 7: Backbone 8: Chest 9: Arm (left) 10: Forearm (left) 11: Hand (left) 12: Arm (right) 13: Forearm (right) 14: Hand right 15: Bandage piece1 16: Bandage piece2 17: Bandage piece3 18: Bandage piece4 19:Head
In above list, the mesh with index 11 and 14 (left and rifght hand) should be specular but in the name of 14: "Hand right" the round parenthesis are missing, differently than 11: "Hand (left)" name, in this case Animation Reviser will be not able to pair the two meshes.
Since just only a single different character to ger an error, in the case you got some error messages, I suggest to use copy & paste, with specual meshes and then change only "left"/"right" text. Since, just only one blank space, less or more, or a parenthesis missing or present, to confuse Animation Reviser.
"Selective Copy of Animation" Operation
This operation allows to copy frames from an animation to another. The most notable feature is that you can copy only some frames or meshes' rotations.
If, about the copy of frame range, this feature is very alike than that of "Edit Animation's frames" operation (that we'll see later), the other chance to copy only animation data from a specific sub-set of meshes is very particular and consent to get nice effects.
The settings of Selective Copy of animation
In (above) settings for Selective Copy of animation, we have to set the SOURCE data of this copying operation. So, we'll set the animation from where take frames and meshes' rotation and the range of frame's and meshes' indices.
About the animation, it could be simply the index of an animation of current slot but, in the case the source animation was from a different slot, we'll have to set a .trw file where we had exported it, because Animation Reviser is not able to read an animation (using only its index) from a slot different than that loaded in Animation Editor.
About the "frames" and "meshes" indices, I remind you that in these fields (and only in these) it's possible also using the "[SAME]" formatter that means: same range set in [Scope] settings.
I remind you also that the target's data of this copying, the animation, frame and meshes, will be obvioulsy set in [Scope] settings.
About the relation between source and target data, it's necessary that the amount of frames and the amount of meshes to affect, was the same, but only the amount, the specific indices could be different.
For instance it could be possible, copy frames 1,2,3,4 from source animation, to target animation in frame's indices 6,7,8,9. The indices are different but their amount (4 in above example) is the same.
Same speech for the meshes' indices, in spite in this case, it should be a bit weird using different meshes' indice for source and target.
Example: running and shooting at same time
We know that Lara is able to run, to jump and, at same time, shooting. In spite of this, we cannot find animations where Lara is shooting and running at same time. The reason of this weirdness is that, that mixing of shooting/running/jumping, has been realized in game with an hardcoded effect, where two different animations will be mixed: animating the top-side of Lara with an animation (of shooting), while the bottom-side of Lara's body will be animated with a running animation.
Using the Selective copy of animation of Animation Reviser, we can get a very alike outcome, and not only with Lara but with any moveables.
Anyway, now we'll demonstate hot the selective copy of animation works, own creating an animation where lara shots and runs (or walks) at same time.
As source (shooting) animation we'll use the animation 3 of UZI_ANIM slot.
While, as target animation, we'll use an animation of standard Lara's slot, where she is waking, let's say the Animation 1.
Since the source animation comes from a different slot (the UZI_ANIM slot) we'll have to export it (the animation 3) to a .trw file. Let's say to export that animation 3 of UZI_ANIM slot to a file named "lara_uzi.trw"
Once done that operation, we'll load in Animation Editor the Lara's slot and set the animation 1: our target animation.
Since the source animation has 9 frames, while the target animation has 10 frames (with a frame rate of 4) we could copy only 9 frames, letting unchanged one of target animation.
About the meshes' indices, we want copy from uzi anim the animation of shooting and therefore, only that of top-side of Lara's body, practically the animation of arms, forearms and hands.
After this briefing we can see the setting to use for this operation:
Now, click on [Perform Operation] and let's see the outcome.
Ok, it works.
"Variable Speed Animation" Operation
We know that a way to change the speed of an animation is changing its frame rate field.
For instance, when an animation has a frame rate = 1, if we set it to 2, we'll move down the speed of half. In same manner, when you reduce the frame rate, we'll speed up the animation.
Animation Reviser, with "Variable Speed Animation" operation, uses a similar way to affect the animation speed but with some differences:
- Animation Editor will not change the frame rate field but it will add or remove real frames from given animation
- Animation Editor can work also on a given range of frames and not only on whole animation
- Animation Editor can change the speed in finer way than double or get half, it. It will be possible set some intermediate ratio to change the amount of frames
Settings for Variable Speed Animation
As settings, you have to type the new frame ratio that will be applied in the frame range you set in [Scope] settings.
Note: about meshes, the value in [Scope] settings will be practically ignored, since this operation will work at level of frames, copying (or removing) always all meshes. So you could set [ALL] in meshes field of [Scope] settings.
About the frame ratio it will give you the chance to modify the speed in finer way than to get double or half. For instance, if you wished reduce the speed of the animation, inside of a given frame range, only about -30%, you could set as ratio 2/3, i.e. 2 as old frame, and 3 as new frames.
This means that, for each 2 frames, there will be a new (duplicated) frame. This should slow down the animation of 33.33%.
You could build also many other ratios of course, anyway, about this speech, I remind you that Animation Reviser will not apply any simplifications on your values. This means that, the ratio 1/2 will have a different behaviour than 2/4, in spite the simplication should be always 1:2, but, using 1/2 it will be added a new (duplicated) frame each old frame, while with 2/4, there will be added 2 news frame, every 2 old frames, and the final animation will be different.
You can also set a ratio to get up the speed, of course, in that case the ratio will have a bigger number numerator than denominator.
For instance a ratio 3/1, will remove two frame for each old group of three frames.
About the way how Animation Reviser will chose the frame to remove or duplicate, let's see some example, giving to frames some letters to identify them.
With a 1/2 ratio, the original sequence of frame:
A, B, C, D
It will become:
A,A,B,B,C,C,D,D
While for a 1/3 ratio, will be:
A, A, A, B, B, B, C, C, C, D, D, D
Using a (weird) ratio of 2/4, it will work in this way:
A,B, B, B, C, D, D, D
Because, once reached the old group of frame (2), "A,B", it will be added, duplicating last frame, the frames to reach the value you set as denominator (4)
While, when you required a remotion of frames, (to speed up the animation) it will work in following way.
For instance, with a ratio of 2/1, working as in previou example, on original sequence:
A, B, C, D
The new sequence will become:
A, C
While with a ratio of 3/1, it will become:
A, D
Please note that in above example there is the problem that the original sequence, and therefore the frame range you had set in [Scope] settings, was not a multiple of the ratio, so there will be a "D" frame that should be the start of next group of three frames. It should be you, to set a reasonable frame range that was a multiple of the ratio you chose.
Having a longer frame sequence, like this:
A, B, C, D, E, F, G, H, I
The ratio: 3/1, will change the frames in following way:
A, D, G
While a ratio of 3/2 (to speed up the animation of 33 %) the final sequence will be:
A,B, D, E, G, H
Note: About the round parenthesis surrouding (or less) the frame amout, see Special syntax for frame indices: the round “( ... )” parenthesis chapter.
The change of animation's lenght
Since this operation will change the amount of frames in the given (set in [Scope] settiings) frame range, there is a speech to do about the “Insert/Add the frame generated by current operation...” option
When, in input frame ratio, the denominator is bigger than numerator, it will be added new frames to animation. In this situation you have to check the “Insert/Add the frame generated by current operation...” option and set "-1" as amount of created frames, letting to Animation Reviser the target to generate the required amount of new frames.
Differently, when you use a ratio with numerator bigger than denominator, some frames will be removed. In this case you should uncheck the “Insert/Add the frame generated by current operation...” option and, simply, at end, the animaiton will have less frames when the operation has been completed.
Example: changing the speed, up and down, in same animation
It' happens sometimes that, after having built an animaiton, watching it in game, we get that the speed is not always correct.
For instance in following animation, where lara hits with a fist:
(VIDEO)
The speed, when Lara is punching with her fist, looks too slow.
Now we'll use Animation Reviser to speed up only the punghing phase.
The range of frames that we'll speed up is that showed in above image: from frame 11 to frame 22 (the last).
We'll use a ratio 2/1, to remove a frame each 2 in that frame range.
Click on [Perform Operation] button and let's see how it works the new animation:
(VIDEO).
Ok, now that we increased the speed in punching phase, we could perform another change, but this time slowing down the speed, in the preparation pahse of the shot.
Let's say to slow down by 33 % the speed in the frame range 1-9
To get a slow down by 33 %, just using a 2/3 ratio.
At end, these will be the settings for this slow-down:
Please, note that it has been necessary enable the “Insert/Add the frame generated by current operation...” option to give the chance to add the required new frames. We set -1 as amount, in this way it will be Animation Reviser to compute the required new amount of frames.
Now we perform this operation and let's see the outcome.
(VIDEO)
Now in our animation, Lara loads slowly the hit and then shots fastly the fist.
"Fix object's position" operation
This is an easy operation: we can change the position of the object, i.e. of its root mesh (the mesh with 0 index), preserving the other animation data.
When we build a new object, a very common operation is own that to move the object to stay correctly on the ground.
Animation Reviser will give us the chance to perform also a dynamic change of position, if you set different values in "Start Values" and "End Values" settings, or to force the object always in same 3d position for all frames, setting same values for "Start" and "End" values.
Note that, the values you'll set in "Start Values" and "End Values" will be not copied to object position but added to orginal values.
This difference is important when you had to modify the position of the object without removing other relative positions.
For instance, in animation 62 of Lara, she moves down as position.
Thanks to this adding (and not replacing the origin values) we could move the whole animation upper (or downer) without losing the relative change of position of original animation.
Anyway, since the value will be added to original position, it's not advisable to use as Start or End values the current position of some other animation.
Example: moving upper a whole animation
Let's say to want modifying animation 110, where Lara is swimming.
In above animation, Lara is floating (swimming calmly) in water
Let's say that we, for some weird reason, wish that Lara's head was bit upper than in standard animation. In this case we need of "Fix object's position" operation.
We can add a value to move a bit upper Lara in whole animation, preserving her movements to swim.
Since to move up an object it's necessary adding a negative value, let's say to add -128 to Y transposition of mesh 0 for whole animation.
Note: I remind you that, differently by Animation Editor, Animation Reviser uses real units for distance and position, it means that one sector is 1024 units and 256 should be a click. Differently, Animation editor uses a ratio 1.0 : 1024 units.
Since we chose -128 as value to add to y position of Lara, it could be an half-click, let's say.
Below will be the settings for our operation.
And this will be the outcome in animation editor:
"Edit Animation's Frames" operations
There are different operations in "Edit Animation's Frames" group.
The common skill of these sub-operations is the chance to may work on group of frames: adding, copying o removing them.
Shortcuts to edit frames from Animation Editor
Most of (above) sub-operations could work also directly in Animtion Editor, avoiding to open the Animation Reviser window.
SHIFT+R
To [R]emove (delete) a serie of frames. When you use this command from Animation Editor, the first frame of the range will be the current frame in Animation Editor, while, about the amount of frames of the range, you'll be prompted to type this amount
SHIFT+C
To [C]opy a frame range to clipboard. Later you'll be able to paste (inserting) this frame range to another position with SHIFT+I shortcut.
The range that it will be copied, will have as first frame the current selected frame in Animation Editor, and then you'll be prompted to type the amount of frames of this range.
Notes:
- The Clipboard used for range frames is not the same you used to copy and paste a single frame with [Frame] menu command of Animation Editor. There are two distinct "clipboard": one for single frames that you manage with [Frame] menu command of Animation Editor or their shortcuts: CTRL+C / CTRL+I / CTRL+V, and another clipboard area, handled by trng_fixer, to copy and paste range of frames, that you'll manage with SHIFT+C / SHIFT+I shorcuts or from Animation Reviser window.
- Differently by common clipboard operations, the clipboard zone of Animation Reviser will be preserved also quitting animation editor and Wad Merger program and then relaunching it, because it will be saved to disk in a special animation exported file named: "clipboard.trw". This file will be saved to root folder of Wad Merger program and, theoratically, you could also using it like a common exported file, importing it to some animation slot (in spite I don't suggest this particular method, because a simple serie of frames has not all data of a complete animation).
SHIFT+I
To [I]nsert frame from clipboard to current animation.
This operation works in according with a previous SHIFT+C operation. With SHIFT+I you can insert (creating space and therefore without overwritting existing frames) the frame range you had previously copied to clipboard with SHIFT+C command.
The frames will be inserted in the index following current selected frame in Animation Editor. This means that:
- If current frame is the last of animation, the frames will be added at bottom of animations
- If current frame is (for instance) the frame with index = 7, the inserted frames will be added from index = 8, creating a new space in the animation to do not overwrite other further existing frames.
- If current frame is the frame with index =0, there will be a particular behaviour: you'll be prompoted to know if you wish inserting the frames from index = 1 (the next of current frame, as usual) or if ,in this case, you want that the frames were inserted at start of current animation, i.e. in 0 index position, This request of information will be made to give also the chance to insert frames at the begin of current animation.
SHIFT+V
To insert the reVersed serie of frames previously saved to clipabord with a SHIFT+C command.
This command is very alike than (above) SHIFT+I command but, in this case, the clipboard frames will be inserted in inverted sorting. In this way you can get an inverted animated sequence.
About other syntax, it is the same of SHIFT+I command.
When to use edit frame commands from Animation Editor and when from Animation Reviser
Talking about this double chance to edit serie of frames from Animation Editor (with the shortcuts: SHIFT+R, SHIFT+C, SHIFT+I or SHIFT+V), or performing these operations from Animation Reviser window, it's important understanding that (sometimes) there is some little difference.
Probably you could prefer to use the shortcuts from Animation Editor but some operations will be possible only using Animation Reviser window.
For instance if you wished remove or copy a non contiguous serie of frames, this operation will be possible only from Animation Reviser, where you could type this serie of frames in "Frames" input box of [Scope] settings.
For instance if you want remove from current animation the frames with indices: 1,3,7,9, you can perform this operation from Animation Reviser but this operation should be not possible with shortcuts via Animation Editor, because from Animation Editor you can work only on a single contiguous range of frames.
Same speech works also for the copy operation: from Animation Editor (and so, with SHIFT+C shortcut) you can copy only a contiguous range di frame, while from Animation Reviser you could copy also an irregular serie of frames like frames with indices: 1,3,5,6
Note about removing frames: I remind you that, when you are working from Animation Reviser, the formatter [Current] in frame input box of [Scope] settings, will work as :from current to last frame. This means that, if you want remove all frames from the current , until end of animation, you can set simply [Current] in frame input box.
If you want the insert frames (taken from clipboard) go to overlap current frames (rather to be inserted as new frames) you can perform this operation only from Animation Reviser. In this case, just choosing the "Insert (from clipboard) frames...", letting unchecked the “Insert/Add the frame generated by current operation...” option .
While, from Animation Editor the SHIFT+I shortcut will always created new frames in the animation, so, avoding to overwrite present frames.
Finally, the command to create space for new frames in the animation, it's available only from Animation Reviser window.
Note: the new frames will have same "look" of frame index from where it has been created the range. For instance, if you set in "Frames" input box of [Scope] settings, the index 12, choosing to create 5 new frames, the new frames (with indices 13,14,15,16 and 17) will be all one a duplicated (with same look) of frame 12.
"Get Smoother Animation" operations
There two different methods to get smoother an animation:
- Acting on a specific sudden movement between two frames.
In this case it will be necessary adding new frames, between the first and the second, creating intermediate frames in the middle
- Acting on whole animation (or a wide frame range of it) to look for still (the same) frames and replace them with a intermediate animation
Create new intermediate frames between two frames
With this operation you can add (insert) new frames to get more gradual the change in meshe's positions between a frame and the next.
Practically, when you see that your animation, in a given point, changes too fastly, like a sudden movement, you can add intermediate frames between these two frames to have a slower change of positions.
Really the method is the same you find in Animation Wizard and indeed it will be used own that code (but always with enabled "Trng Frame Generator" mode).
The advantage to use that procedure in Animation Reviser with "Smoother Animation" operation, is that in this way many settings will be set in easier way.
You have to set only:
- Meshes = [ALL]
- Frames = Index of frame where (at next frame) there will the sudded movement to fix
While in [Output] settings you'll have to check the [Insert/Add the frames generated...] and type the amount of new frames to add.
Example of "Smoother Animation" operation
Let's say we have an animation (see above picture) where we have too sudden movement with right arm of Lara.
If we want getting slower and more gradual this movement, just we perform following operations:
- Select (in 3d scene) the frame 24. The first before the suddend movement
- Now we open Animation Reviser
- Select [Get Smoother Animation]
- Set in [Frames] of "Scope" setting, the current frame (clicking on [CURRENT] button at right of "Frames" text box
- Check (in [Output] setting) the [Insert/add the frames generated] option
- Now we type the value of new frames we want add, let's say "2", in text box for new frames to create
- Now we click on [Perform Operation] button
In this way we'll get two new frames after frame 24, where there will be intermediate positions.
See below picture:
The new 25 and 26 frames, have been created to get that more gradual movement, that we wished.
Replace all even frames with intermediate frames
This other method works with animations where there are two or more frames that are even (the same one than next).
This operation works only with animations that have a frame rate =1, but you can improve also other animations following this procedure:
Let's say we have an animation with frame rate =2...
Now we can:
- Change the FrameRate to 1
- Using Animation Reviser, we apply the [Variable Speed Animation] operation to double newly the frames: setting a ratio: 1/2 (for each "1" old frames, create (2) new frames)
- Now we can use [Replace all even frames] operation
Well, now the question is : "Why should we do this? What is the gain?"
We can show the gain with an example
Example of Replace all even frames operation
Let's say we have an animation (with frame rate =2) where there are these first frames:
We know that, with an animation with frame rate =2, it will be not possible select the frame with index = 1,of course.
Well, now we apply the (above described) procedure:
We change the frame rate to 1 and then we apply the [Variable Speed Animation] operation, on this animation, setting all frames and a ratio of 1/2.
We'll get this start of animation:
It's interesting underline that this animation will have, in game, excactly same look of previous original animation with frame rate =2, because it's own this the meaning of framerate, how many duplicates will have each frame.
Now we can apply, to above animation, the [Replace all even frames] operation.
In this case we can let [All] for frames (and for Meshes)
At end we'll get this final animation:
How you can see, now the "duplicated" frame have been replaced with "animated" frames, that I call "intermediate frames", getting more gradual the changes in our animation.
This animation will have yet same speed in game (and same amount of frames) but the movements will be smoother.